﻿@{
    ViewData["Title"] = "Demo";

    var versionNumber = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
}

<h2 title="Myvas.AspNetCore.Authentication.Demo">@ViewData["Title"] <small>@(versionNumber)</small></h2>

<p>这是一组github开源项目的演示网站。本网站源代码在此：<a href="https://github.com/myvas/AspNetCore.Authentication.Demo.git">Myvas.AspNetCore.Authentication.Demo</a></p>
<ul>
    <li>WeixinOpen (open.weixin.qq.com)</li>
    <li>WeixinAuth (mp.weixin.qq.com)</li>
    <li>QQConnect (connect.qq.com)</li>
</ul>

<h3>部署环境</h3>
<p>本程序部署在Debian.10-x64服务器上。</p>
<p><strong>注意：</strong>本程序必须部署公网服务器80端口上，并在相应微信公众号上配置好“网页服务/网页授权获取用户基本信息”才能正常工作。</p>
<hr />
<h3>触发身份验证</h3>
<p>(1)点击<a asp-action="UserInfo">UserInfo</a>触发Challenge进入登录页面。</p>
<p>--- 或 ---</p>
<p>(2)点击<a asp-action="ShowQrcode" asp-route-redirectUrl="@Url.AbsoluteAction("UserInfo","Home")">这里</a>展示一个网址二维码，用手机扫码进入。</p>
<p>--- 或 ---</p>
(3)直接扫码进入微信公众号测试，然后点击菜单[UserInfo]
<p>
    <img src="~/img/mp-test.jpg" height="200" />
    <div class="help-block">（注：以上微信公众号的源码在<a href="https://github.com/myvas/Weixin">Myvas.AspNetCore.Weixin</a>，其<a href="http://wx.myvas.com">Demo程序</a>可以修改这些菜单）</div>
</p>
<hr />

<h3>一、<a href="https://connect.qq.com">QQ开放平台</a>-网站接入QQ登录</h3>
<p>此方式<strong>须</strong>将网站接入到QQ开放平台。</p>
<p>
    通常的应用场景是：<br />
    1.用户在PC或平板电脑上打开您的网站上某个需要身份验证的网页；<br />
    2.网站系统[Authorize]发现该用户尚未登录，于是显示登录页面；<br />
    3.用户点击QQ登录图标，用手机QQ扫码，或直接输入QQ账户密码登入；<br />
    4.网站系统继续打开目标网页，显示给用户。
</p>

<h3>二、<a href="https://open.weixin.qq.com">微信开放平台</a>-网站接入微信登录</h3>
<p>此方式<strong>无须</strong>用户预先关注您的微信公众号。</p>
<p>
    通常的应用场景是：<br />
    1.用户在PC或平板电脑上打开您的网站上某个需要身份验证的网页；<br />
    2.网站系统[Authorize]发现该用户尚未登录，于是显示登录页面；<br />
    3.用户选择扫码方式登录，掏出手机扫码；<br />
    4.网站系统继续打开目标网页，显示给用户。
</p>
<p>在登录页面，选择【WeixinOpen】方式登录。</p>

<h3>三、<a href="https://mp.weixin.qq.com">微信公众平台</a>-微信内网页授权</h3>
<p>此方式<strong>必须</strong>用户预先关注您的微信号。</p>
<p>
    通常的应用场景是：<br />
    0.用户已经关注了您的微信公众号；<br />
    1.用户使用手机微信进入您的微信公众号，点击某菜单；<br />
    2.微信公众号服务程序[Authorize]发现该用户尚未登录，于是跳转到登录页面；<br />
    3.登录页面发现用户终端是微信客户端，于是直接执行ExternalLogin方法Challenge：WeixinOAuth身份验证；<br />
    4*.是否需要用户微信确认；（默认options.SilentMode=true，即不附加snsapi_userinfo）<br />
    5.腾讯服务器回调ExternalLoginCallback方法，微信公众号服务程序匹配系统用户，身份验证通过，将目标网页显示给用户。
</p>

<hr />
<h3>用到的其他组件</h3>
<dl>
    <dt><a href="https://github.com/myvas/TencentSms">Myvas.AspNetCore.TencentSms</a></dt>
    <dd>腾讯云短信：发送短信验证码。</dd>
    <dt><a href="https://github.com/myvas/ViewDivert">Myvas.AspNetCore.ViewDivert</a></dt>
    <dd>检测微信客户端：在Account/Login中检测客户端，如果是微信客户端则直接使用WeixinAuth身份验证，否则触发标准Identity登录网页。</dd>
</dl>

<footer class="border-top card-footer text-muted">
    <div class="container">&copy; 2004-2019 Myvas.AspNetCore.Authentication.Demo  [Powered by <a href="http://gingcin.com" title="Gingcin Consulting LLC">Gingcin</a>]</div>
</footer>